/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import io.PlanDTO;
import java.sql.*;
import java.util.ArrayList;

/**
 * Esta clase representa al gestor de la tabla plan que se encuentra
 * almacenada en la base de datos.
 * @author nahuel
 */
public class MySQLPlanDAO {

    /**
     * Este mensaje permite insertar un nuevo plan en la base de datos
     * @param plan 
     * @throws DAOException 
     */
    public void agregarPlan(PlanDTO plan, int idVenta) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            stat.executeUpdate("insert into plan (idVenta,numero,numCuotas,montoCuotas,fechaInicio,activo) values (" + idVenta + "," + plan.getNumero() + "," + plan.getNumCoutas() + "," + plan.getMontoCoutas() + ",'" + plan.getFechaIncicio() + "'," + plan.isActivo() + ")", Statement.RETURN_GENERATED_KEYS);
            ResultSet generatedKeys = stat.getGeneratedKeys();
            if (generatedKeys.next()) {
                plan.setId(generatedKeys.getInt(1));
            }
        } catch (SQLException e) {
            throw new DAOException("Error al insertar el plan en la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }

    /**
     * Este mensaje permite obtener un plan que contenga el id de la venta 
     * que se le pasa como parámetro, en caso de no existir ninguna devuelve 
     * null
     * @param idVenta
     * @return
     * @throws DAOException 
     */
    public ArrayList<PlanDTO> getPlan(int idVenta) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            ResultSet rs = stat.executeQuery("select * from plan where idVenta = " + idVenta);
            ArrayList<PlanDTO> lista = new ArrayList();
            if (rs != null) {
                while (rs.next()) {
                    PlanDTO plan = new PlanDTO(rs.getInt("idPlan"), rs.getInt("numero"), rs.getInt("numCuotas"), rs.getDouble("montoCuotas"), rs.getDate("fechaInicio"), rs.getBoolean("activo"));
                    lista.add(plan);
                }
            }
            rs.close();
            return lista;
        } catch (SQLException e) {
            throw new DAOException("Error al leer el plan desde la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
    
    /**
     * Este método permite modificar el estado de un plan
     * @param id
     * @throws DAOException 
     */
    public void desactivarPlan(int id) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            stat.executeUpdate("update plan set activo = " + false + " where idPlan = " + id);
        } catch (SQLException e) {
            throw new DAOException("Error al desactivar el plan en la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
    
    /**
     * Este método permite borrar un plan
     * @param id
     * @return true si fue exitoso y false si la plan no existe
     * @throws DAOException 
     */
    public boolean eliminarPlan(int id) throws DAOException {
        Connection conexion = null;
        try {
            conexion = MySQLDAOFactory.getMySQLDAOFactory().getConexion();
            Statement stat = conexion.createStatement();
            if (stat.executeUpdate("delete from plan where idPlan = '" + id + "'") == 0) {
                return false;
            } else {
                return true;
            }
        } catch (SQLException e) {
            throw new DAOException("Error al borrar el plan de la base de datos", e);
        } finally {
            MySQLDAOFactory.getMySQLDAOFactory().cerrarConexion(conexion);
        }
    }
    
}
